#ifndef REPRESENTATION_PAGES_H
#define REPRESENTATION_PAGES_H

#include <QWidget>
#include <QtGui>

class BoundaryFollowingPage : public QWidget{
	Q_OBJECT

    public:
        BoundaryFollowingPage(QWidget *parent = 0);
        void tryItAgain();

    signals:
        void done();

    private slots:
        void tryIt();

    private:
        QPushButton *tryItButton;
};

class ChainCodePage : public QWidget{
	Q_OBJECT

    public:
        ChainCodePage(QWidget *parent = 0);

        void setStrings(QString, QString, QString);
//        int getType();
        int getResample();
        void tryItAgain();

    signals:
        void done();

    private slots:
//        void changeType(int);
        void changeResample(int);
        void tryIt();

    private:
//        int type;
        int resample;
        QLineEdit *chainCodeLineEdit, *firstDifferenceLineEdit, *shapeNumberLineEdit;
        QPushButton *tryItButton;
};

class SplittingPage : public QWidget{
	Q_OBJECT

    public:
        SplittingPage(QWidget *parent = 0);

        void setPoints(QString);
        int getDepth();
        void tryItAgain();

    signals:
        void done();

    private slots:
        void changeDepth(int);
        void tryIt();

    private:
//        int type;
        int depth;
        QTextEdit *pointsTextEdit;
        QPushButton *tryItButton;
};

class BasicDescriptorsPage : public QWidget{
	Q_OBJECT

    public:
        BasicDescriptorsPage(QWidget *parent = 0);
        void setStrings(QString, QString, QString, QString, QString);

    private:
        QLineEdit *perimeterLineEdit;
        QLineEdit *areaLineEdit;
        QLineEdit *diameterLineEdit;
        QLineEdit *compactnessLineEdit;
        QLineEdit *circularRatioLineEdit;
};

class MomentInvariantsDescriptorsPage : public QWidget{
	Q_OBJECT

    public:
        MomentInvariantsDescriptorsPage(QWidget *parent = 0);
        void setStrings(QString, QString, QString, QString, QString, QString, QString);

    private:
        QLineEdit *invariantMoments1LineEdit;
        QLineEdit *invariantMoments2LineEdit;
        QLineEdit *invariantMoments3LineEdit;
        QLineEdit *invariantMoments4LineEdit;
        QLineEdit *invariantMoments5LineEdit;
        QLineEdit *invariantMoments6LineEdit;
        QLineEdit *invariantMoments7LineEdit;
};

class HistogramDescriptorsPage : public QWidget{
	Q_OBJECT

    public:
        HistogramDescriptorsPage(QWidget *parent = 0);
        void setStrings(QString, QString, QString, QString, QString, QString);

    private:
        QLineEdit *meanLineEdit;
        QLineEdit *standardDeviationLineEdit;
        QLineEdit *rLineEdit;
        QLineEdit *thirdMomentLineEdit;
        QLineEdit *uniformityLineEdit;
        QLineEdit *entropyLineEdit;
};

#endif
